<?php

/**
 * producto actions.
 *
 * @package    cronos-doctrine
 * @subpackage producto
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class productoActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
     
    $producto = new Producto();
    $this->productos = $producto->getProducto();
    
    
  }

  public function executeShow(sfWebRequest $request)
  {
    //$this->producto = Doctrine_Core::getTable('Producto')->find(array($request->getParameter('id')));
    $this->producto = $this->getRoute()->getObject();
    $this->producto->actualizarVisita($this->producto->getVisita());


    $precio = new ProductoPrecio();
    
    $this->precios = $precio->getPrecioProductoPrincipal($this->producto->getId());

    $detalle = new ProductoDetalle();
    $this->detalles = $detalle->getDetalleProducto($this->producto->getId());
    

    //$/this->getUser()->addProductoToHistory($this->producto);
    
    //$this->categoria = $this->getUser()->getCategoria();
    
    
    
  }


  public function executeSearch(sfWebRequest $request)
  {
    $this->forwardUnless($query = $request->getParameter('query'), 'producto', 'index');
    $producto = new Producto();
    $this->productos = $producto->getForLuceneQuery($query);
     
  }

  public function executeComparacionUpdate(sfWebRequest $request)
  {
      //inicializacion de la variable de session cart
      if(!$this->getUser()->getAttribute('comp'))
          $this->getUser()->setAttribute('comp', array());
     //declar variable para contener arreglo
     $productos = $this->getUser()->getAttribute('comp');
     //capturar index de la matriz usando ID
     $producto_id=$this->getRequestParameter('id');
     //validar si el producto ya fue agregado
     if(!isset($productos[$producto_id])){
     //capturo los datos por URL y los insertos en la matriz asociativa
     $productos[$producto_id]=array ('nombre' => $this->getRequestParameter('nombre'),
                                     'cantidad' => $this->getRequestParameter('cantidad') ,
                                     'precio' => $this->getRequestParameter('precio'),
                                     'url' => $this->getRequestParameter('url'));
     }else {
     //sumar cantidad si existe el producto
     $productos[$producto_id]['cantidad']+=$this->getRequestParameter('cantidad');
     }
     //se asgina matriz asociada a la matriz cart
     $this->getUser()->setAttribute('comp', $productos);
     $this->redirect('producto/comparacion');
    
  }
   public function executeComparacion(sfWebRequest $request)
  {
    //ejecuta la pagina de listar las comparaciones
  }
  public function executeComparacionList(sfWebRequest $request)
  {
    //ejecuta la pagina de listar las comparaciones
  }
     public function executeComparaciondelete(sfWebRequest $request)
  {
        
    $producto_id = $this->getRequestParameter('producto_id');
    $productos = $this->getUser()->getAttribute('comp');

    unset($productos[$producto_id]);

    if(!$productos){
        unset($productos);

    }
    $this->getUser()->setAttribute('comp', $productos);
    $this->redirect('producto/comparacion');
    
  }

  public function executeComparacionshow(sfWebRequest $request)
  {
   
  }

// Lista de Deseos

    public function executeWishUpdate(sfWebRequest $request)
  {
      //inicializacion de la variable de session cart
      if(!$this->getUser()->getAttribute('wish'))
          $this->getUser()->setAttribute('wish', array());
     //declar variable para contener arreglo
     $productos = $this->getUser()->getAttribute('wish');
     //capturar index de la matriz usando ID
     $producto_id=$this->getRequestParameter('id');
     //validar si el producto ya fue agregado
     if(!isset($productos[$producto_id])){
     //capturo los datos por URL y los insertos en la matriz asociativa
     $productos[$producto_id]=array ('nombre' => $this->getRequestParameter('nombre'),
                                     'cantidad' => $this->getRequestParameter('cantidad') ,
                                     'precio' => $this->getRequestParameter('precio'),
                                     'url' => $this->getRequestParameter('url'));
     }else {
     //sumar cantidad si existe el producto
     $productos[$producto_id]['cantidad']+=$this->getRequestParameter('cantidad');
     }
     //se asgina matriz asociada a la matriz cart
     $this->getUser()->setAttribute('wish', $productos);
     $this->redirect('producto/wish');

  }
   public function executeWish(sfWebRequest $request)
  {
    //ejecuta la pagina de listar las comparaciones
  }
  public function executeWishList(sfWebRequest $request)
  {
    //ejecuta la pagina de listar las comparaciones
  }
     public function executeWishdelete(sfWebRequest $request)
  {

    $producto_id = $this->getRequestParameter('producto_id');
    $productos = $this->getUser()->getAttribute('wish');

    unset($productos[$producto_id]);

    if(!$productos){
        unset($productos);

    }
    $this->getUser()->setAttribute('wish', $productos);
    $this->redirect('producto/wish');

  }

  public function executeWishshow(sfWebRequest $request)
  {
    
  }
  
  public function executeCreateComentario(sfWebRequest $request)
  {
      
    if ($this->getUser()->isAuthenticated()){
        $this->forward404Unless($request->isMethod(sfRequest::POST));
        
        $this->form  = new ComentarioForm();        
        $this->processFormComentario($request, $this->form);
        
        $valor = $request->getParameter('comentario');
        $this->form->setWidget('user_id', new sfWidgetFormInputHidden(array(),array('value' => $this->getUser()->getGuardUser()->getId())));
        $this->form->setWidget('comentario_status_id', new sfWidgetFormInputHidden(array(),array('value' => 1)));
        $this->form->setWidget('producto_id', new sfWidgetFormInputHidden(array(),array('value' => $valor['producto_id'])));
        
        $this->producto = Doctrine_Core::getTable('Producto')->find(array($valor['producto_id']));
        


        $precio = new ProductoPrecio();
        $this->precios = $precio->getPrecioProductoPrincipal($this->producto->getId());

        $detalle = new ProductoDetalle();
        $this->detalles = $detalle->getDetalleProducto($this->producto->getId());
        
        $imagen = new Archivo();
        $this->imagenes = $imagen->getArchivoProducto($this->producto->getId());

        
        $this->categoria = $this->getUser()->getCategoria();

        $comentario = new Comentario();
        $this->comentarios = $comentario->getComentario();
        
        $this->setTemplate('show');
        
    }
    
    
    
    
  }
  
  protected function processFormComentario(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $notice = $form->getObject()->isNew() ? 'El item se creó correctamente.' : 'El item se actualizó correctamente.';  
      try {
      $comentario = $form->save();
      
      } catch (Doctrine_Validator_Exception $e) {

        $errorStack = $form->getObject()->getErrorStack();

        $message = get_class($form->getObject()) . ' has ' . count($errorStack) . " field" . (count($errorStack) > 1 ?  's' : null) . " with validation errors: ";
        foreach ($errorStack as $field => $errors) {
            $message .= "$field (" . implode(", ", $errors) . "), ";
        }
        $message = trim($message, ', ');

        $this->getUser()->setFlash('error', $message);
        return sfView::SUCCESS;
      }
      $this->getUser()->setFlash('notice', $notice);
      $this->redirect('index/index');
    }
  }

}
